package com.boot.common;

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.fields.TextRange;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Word2Pdf {
    //创建Word文档
    private Document document;

    /**
     * 创建一个工作簿
     */
    public void createWork() {
        this.document = new Document();
    }


    public static void main(String[] args) throws IOException {
        String wordPath = newWord(new WordEntity());

        word2Pdf(wordPath, "00.pdf");
    }

    public static void word2Pdf(String wordPath, String pdfPath) {
        //实例化Document类的对象
        Document doc = new Document();

        //加载Word
        doc.loadFromFile(wordPath);

        //保存为PDF格式
        doc.saveToFile(pdfPath, FileFormat.PDF);
    }

    public static String newWord(WordEntity wordEntity) throws IOException {
        //创建Word文档
        Document document = new Document();

        //添加一个section
        Section section = document.addSection();

        Paragraph para01 = section.addParagraph();
        para01.appendText("");
        //添加三个段落至section
        Paragraph para1 = section.addParagraph();
        para1.appendText(wordEntity.getTitle());

//        Paragraph para2 = section.addParagraph();
//        para2.appendText("豫章故郡，洪都新府。星分翼轸，地接衡庐。襟三江而带五湖，控蛮荆而引瓯越。" +
//                "物华天宝，龙光射牛斗之墟；人杰地灵，徐孺下陈蕃之榻。雄州雾列，俊采星驰。台隍枕夷夏之交，宾主尽东南之美。" +
//                "都督阎公之雅望，棨戟遥临；宇文新州之懿范，襜帷暂驻。十旬休假，胜友如云；千里逢迎，高朋满座。" +
//                "腾蛟起凤，孟学士之词宗；紫电青霜，王将军之武库。家君作宰，路出名区；童子何知，躬逢胜饯。");
//
//        Paragraph para3 = section.addParagraph();
//        para3.appendText("时维九月，序属三秋。潦水尽而寒潭清，烟光凝而暮山紫。俨骖騑于上路，访风景于崇阿；临帝子之长洲，得天人之旧馆。" +
//                "层峦耸翠，上出重霄；飞阁流丹，下临无地。鹤汀凫渚，穷岛屿之萦回；桂殿兰宫，即冈峦之体势。");

        //将第一段作为标题，设置标题格式
        ParagraphStyle style1 = new ParagraphStyle(document);
        style1.setName("titleStyle");
        style1.getCharacterFormat().setBold(true);
        style1.getCharacterFormat().setTextColor(Color.BLACK);
        style1.getCharacterFormat().setFontName("宋体");
        style1.getCharacterFormat().setFontSize(12f);
        document.getStyles().add(style1);
        para01.applyStyle("titleStyle");
        para1.applyStyle("titleStyle");

//        //设置其余两个段落的格式
//        ParagraphStyle style2 = new ParagraphStyle(document);
//        style2.setName("paraStyle");
//        style2.getCharacterFormat().setFontName("宋体");
//        style2.getCharacterFormat().setFontSize(11f);
//        document.getStyles().add(style2);
//        para2.applyStyle("paraStyle");
//        para3.applyStyle("paraStyle");

        //设置第一个段落的对齐方式
        para1.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);

//        //设置第二段和第三段的段首缩进
//        para2.getFormat().setFirstLineIndent(25f);
//        para3.getFormat().setFirstLineIndent(25f);

        //设置第一段和第二段的段后间距
        para1.getFormat().setAfterSpacing(15f);
//        para2.getFormat().setAfterSpacing(10f);
        wordTable(section);
        String wordPath = "Output.docx";
        //保存文档
        document.saveToFile(wordPath, FileFormat.Docx);
        return wordPath;
    }

    public static void wordTable(Section section) throws IOException {


        //数据
        String[] header = {"姓名", "性别", "部门", "工号"};
        String[][] data =
                {
                        new String[]{"Winny", "女", "综合", "0109"},
                        new String[]{"Lois", "女", "综合", "0111"},
                        new String[]{"Jois", "男", "技术", "0110"},
                        new String[]{"Moon", "女", "销售", "0112"},
                        new String[]{"Vinit", "女", "后勤", "0113"},
                };

        //添加表格
        Table table = section.addTable(true);
        //设置表格的行数和列数
        table.resetCells(data.length + 1, header.length);

        //调用方法获取第4行中的第4个单元格，拆分成2列3行
//        table.getRows().get(3).getCells().get(3).splitCell(2,3);


        //设置第一行作为表格的表头并添加数据
        TableRow row = table.getRows().get(0);
        row.isHeader(true);
        row.setHeight(40);
        row.setHeightType(TableRowHeightType.Exactly);
        row.getRowFormat().setBackColor(Color.gray);
        for (int i = 0; i < header.length; i++) {
            row.getCells().get(i).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            Paragraph p = row.getCells().get(i).addParagraph();
            p.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
            TextRange range1 = p.appendText(header[i]);
            range1.getCharacterFormat().setFontName("Arial");
            range1.getCharacterFormat().setFontSize(12f);
            range1.getCharacterFormat().setBold(true);
        }

        //添加数据到剩余行
        for (int r = 0; r < data.length; r++) {
            TableRow dataRow = table.getRows().get(r + 1);
            dataRow.setHeight(35);
            dataRow.setHeightType(TableRowHeightType.Exactly);
            dataRow.getRowFormat().setBackColor(Color.white);
            for (int c = 0; c < data[r].length; c++) {
                if (r == 0 && c == 3) {
                    continue;
                }
                dataRow.getCells().get(c).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
                TextRange range2 = dataRow.getCells().get(c).addParagraph().appendText(data[r][c]);
                range2.getCharacterFormat().setFontName("Arial");
                range2.getCharacterFormat().setFontSize(10f);
            }
        }

        //设置单元格背景颜色
        for (int j = 1; j < table.getRows().getCount(); j++) {
            if (j % 2 == 0) {
                TableRow row2 = table.getRows().get(j);
                for (int f = 0; f < row2.getCells().getCount(); f++) {
                    row2.getCells().get(f).getCellFormat().setBackColor(new Color(173, 216, 230));
                }
            }
        }
        //调用方法纵向合并第1列中的第2、3个单元格
        table.applyVerticalMerge(3, 1, 3);
        //调用方法横向合并第1行中的第2、3个单元格
        table.applyHorizontalMerge(4, 0, 3);
//        writeImg(table);
        table.getRows().get(1).getCells().get(3).addParagraph().appendText("");
        DocPicture picture = table.getRows().get(1).getCells().get(3).addParagraph().appendPicture("C:\\Users\\Administrator\\Desktop\\图片视频\\牛兆琪+13587902570.jpeg");//添加图片到单元格（0，0）
        picture.setWidth(100f);//设置图片宽度
        picture.setHeight(100f);//设置图片高度

    }


    public static void writeImg(Table table) throws IOException {

        //创建Document对象
//        Document document = new Document();
//        Section section = document.addSection();

        //添加表格
//        Table table = section.addTable(true);
//        table.resetCells(2, 2);

        //添加图片到单元格，并自定义图片大小
        DocPicture picture = table.getRows().get(2).getCells().get(3).addParagraph().appendPicture("C:\\Users\\Administrator\\Desktop\\010.gif");//添加图片到单元格（0，0）
        picture.setWidth(100f);//设置图片宽度
        picture.setHeight(100f);//设置图片高度

        //将图片按原始尺寸添加到单元格
//        File file = new File("C:\\Users\\Administrator\\Desktop\\010.gif");//加载图片
//        FileInputStream inputStream = new FileInputStream(file);
//        BufferedImage image = ImageIO.read(file);
//        int width= image.getWidth();//获取图片尺寸
//        int height = image.getHeight();
//        picture = table.getRows().get(1).getCells().get(1).addParagraph().appendPicture(inputStream);//添加图片到单元格（1，1）
//        picture.setWidth(width);//设置图片宽度为原始宽度
//        picture.setHeight(height);//设置图片高度为原始高度

        //设置表格大小自适应内容
        table.autoFit(AutoFitBehaviorType.Auto_Fit_To_Contents);

        //保存文档
//        document.saveToFile("output/AddPictureToCell.docx", FileFormat.Docx_2013);
    }

}
